package cc.rico.algorithm;

import org.apache.commons.lang3.ArrayUtils;

/**
 *
 * @Author: Dell
 * @Date: 2018/12/5
 * @Description:选择排序
 * 简单选择排序是最简单直观的一种算法，基本思想为每一趟从待排序的数据元素中选择最小（或最大）的一个元素作为首元素，
 * 直到所有元素排完为止，简单选择排序是不稳定排序。
 */
public class ElectSort {

    public static void main(String[] args) {
        int[] items = new int[] {23, 22, 5, 6, 90, 43, 90, 1};
        PrintUtil.printArray(items);

        int[] results = sortUp(items);
        PrintUtil.printArray(results);

        results = sortDown(items);
        PrintUtil.printArray(results);
    }


    private static int[] sortUp(int[] items) {
        //int[] result = new int[items.length];

        for(int i=0; i<items.length; i++) {
            int min = items[i];
            int index = i;

            for(int j=i+1; j<items.length; j++) {
                if(min <= items[j]) {
                    continue;
                }
                min = items[j];
                index = j;
            }

            int temp = items[i];
            items[i] = items[index];
            items[index] = temp;
        }

        return items;
    }

    private static int[] sortDown(int[] items) {
        if(ArrayUtils.isEmpty(items)) {
            return null;
        }

        for(int i=0; i<items.length-1; i++) {
            int currentItem = items[i];
            int currentIndex = i;

            for(int j=i+1; j<items.length; j++) {
                if(currentItem >= items[j]) {
                    continue;
                }
                currentItem = items[j];
                currentIndex = j;
            }

            int temp = items[i];
            items[i] = items[currentIndex];
            items[currentIndex] = temp;
        }

        return items;
    }

}
